# Initial process that execs /init.
# This code runs in user space.

#include "include/sysnum.h"
# exec(init, argv)
.global start
start:
	la a0,munmap
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,open
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,yield
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,execve
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,clone
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,write
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,openat
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,getppid
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,read
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,umount
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,dup2
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,pipe
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,brk
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,sleep
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,wait
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,close
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,exit
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,mkdir_
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,getdents
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,test_echo
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,dup
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,fstat
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,mmap
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,uname
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,getpid
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,getcwd
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,gettimeofday
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,fork
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,waitpid
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,times
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,chdir
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,mount
	la a1,argv
	li a7,SYS_exec
	ecall
	la a0,unlink
	la a1,argv
	li a7,SYS_exec
	ecall
# for(;;) exit()
end:
	li a7,SYS_exit
	ecall
	jal end
munmap:
	.string "/munmap\0"
open:
	.string "/open\0"
yield:
	.string "/yield\0"
execve:
	.string "/execve\0"
clone:
	.string "/clone\0"
write:
	.string "/write\0"
openat:
	.string "/openat\0"
getppid:
	.string "/getppid\0"
read:
	.string "/read\0"
umount:
	.string "/umount\0"
dup2:
	.string "/dup2\0"
pipe:
	.string "/pipe\0"
brk:
	.string "/brk\0"
sleep:
	.string "/sleep\0"
wait:
	.string "/wait\0"
close:
	.string "/close\0"
exit:
	.string "/exit\0"
mkdir_:
	.string "/mkdir_\0"
getdents:
	.string "/getdents\0"
test_echo:
	.string "/test_echo\0"
dup:
	.string "/dup\0"
fstat:
	.string "/fstat\0"
mmap:
	.string "/mmap\0"
uname:
	.string "/uname\0"
getpid:
	.string "/getpid\0"
getcwd:
	.string "/getcwd\0"
gettimeofday:
	.string "/gettimeofday\0"
fork:
	.string "/fork\0"
waitpid:
	.string "/waitpid\0"
times:
	.string "/times\0"
chdir:
	.string "/chdir\0"
mount:
	.string "/mount\0"
unlink:
	.string "/unlink\0"
.p2align 2
argv:
	.long 0
